{
    // Array.of() 方法创建一个具有可变数量参数的新数组实例，而不考虑参数的数量或类型。
    // Array.of(7) 创建一个具有单个元素 7 的数组，而 Array(7) 创建一个长度为7的空数组
    let arr = Array.of(3, 4, 7, 9, 11);
    console.log('arr=', arr);

    let empty = Array.of();
    console.log('empty', empty);

    let arr_of_five = Array.of(5)
    let arr_five = Array(5)
    console.log("数组详情", arr_of_five, arr_five)
    console.log("数组长度", arr_of_five.length, arr_five.length)
}

{
    /**
     * Array.from() 方法从一个类似数组或可迭代对象中创建一个新的数组实例。 PS: 不会影响原来的数组; 类似map不用多行显示
     * 
     * Array.from(arrayLike[, mapFn[, thisArg]])
     * arrayLike 想要转换成数组的伪数组对象或可迭代对象。
     * mapFn (可选参数) 如果指定了该参数，新数组中的每个元素会执行该回调函数。
     * thisArg (可选参数) 可选参数，执行回调函数 mapFn 时 this 对象。
     */
    let arrTemp0 = [3, 4, 7, 9, 11]
    let ArrayForEach = arrTemp0.map((item) => { return item * 2 })
    console.log(arrTemp0, ArrayForEach);

    let arrTemp = [3, 4, 7, 9, 11]
    let ArrayFromData = Array.from(arrTemp, function (item) { return item * 2 })
    // 不会影响原来的数组; 类似map不用多行显示
    console.log(arrTemp, ArrayFromData);
}

{
    /**
     * ES6为Array增加了fill()函数，使用制定的元素填充数组，其实就是用默认内容初始化数组。
     * 
     * arr.fill(value, [start], [end])
     * value：填充值。
     * start：填充起始位置，可以省略。
     * end：填充结束位置，可以省略，实际结束位置是end-1。
     */

    var demoArr = [1, 'a', undefined]
    console.log('fill-7', demoArr.fill(7)); // [7, 7, 7]
    console.log('fill,pos', ['a', 'b', 'c'].fill(7, 1, 2)); // ["a", 7, "c"]
    console.log('fill,pos', ['a', 'b', 'c'].fill(7, 1, 10)); // ["a", 7, 7]
}

{
    // 返回元素key值
    for (let index of ['1', 'c', 'ks'].keys()) {
        console.log('keys', index);
    }
    // 返回元素value值
    for (let value of ['1', 'c', 'ks'].values()) {
        console.log('values', value);
    }
    // entries() 方法返回一个数组的迭代对象，该对象包含数组的键值对 (key/value)。
    for (let [index, value] of ['1', 'c', 'ks'].entries()) {
        console.log('values', index, value);
    }
}

{
    /**
     * copyWithin() 方法用于从数组的指定位置拷贝元素到数组的另一个指定位置中。
     * 
     * array.copyWithin(target, [start], [end])
     * target	必需。复制到指定目标索引位置。
     * start	可选。元素复制的起始位置。
     * end	可选。停止复制的索引位置 (默认为 array.length)。如果为负值，表示倒数。
     */
    let arrTemp = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    console.log("copyWithin", arrTemp.copyWithin(4, 0, 3));  // 将 arrTemp从0开始, 到3-1额索引值复制到索引4开始的位置
    console.log("arrTemp在copyWithin后改变", arrTemp);  // 将 arrTemp从0开始, 到3-1额索引值复制到索引4开始的位置

    /**
     * find()函数用来查找目标元素，找到就返回该元素，找不到返回undefined。PS: 方法返回通过测试（函数内判断）的数组的第一个元素的值。
     * findIndex()函数也是查找目标元素，找到就返回元素的位置，找不到就返回-1。PS: 方法返回传入一个测试条件（函数）符合条件的数组第一个元素位置。
     */
    let arrTemp2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    console.log("find()-值", arrTemp2.find(function (item) { return item > 3 }));
    console.log("findIndex()-索引", arrTemp2.findIndex(function (item) { return item > 3 }));
    console.log("arrTemp2", arrTemp2)
}

{
    // ncludes() 方法用来判断一个数组是否包含一个指定的值，如果是返回 true，否则false。
    console.log('number', [1, 2, NaN].includes(1));
    console.log('number', [1, 2, 0, undefined, null,NaN].includes(NaN));
    console.log('number', [1, 2, 0, undefined, null].includes(NaN));
}
